package com.zhentao.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 规则类型枚举
 * @author zhentao
 * @date 2024-12-19
 */
@Getter
@AllArgsConstructor
public enum RuleTypeEnum {
    
    /**
     * 校验规则 - 用于参数值的合法性校验
     */
    VALIDATION("VALIDATION", "校验规则", "参数值合法性校验，如格式、范围、必填等"),
    
    /**
     * 计算规则 - 用于参数值的计算和推导
     */
    CALCULATION("CALCULATION", "计算规则", "基于输入参数计算输出值，如税率计算、费用计算等"),
    
    /**
     * 转换规则 - 用于参数值的格式转换
     */
    TRANSFORM("TRANSFORM", "转换规则", "参数值格式转换，如单位转换、编码转换等"),
    
    /**
     * 逻辑规则 - 用于复杂的业务逻辑判断
     */
    LOGIC("LOGIC", "逻辑规则", "复杂业务逻辑判断，如审批流程、权限控制等"),
    
    /**
     * 关联规则 - 用于参数间的关联性检查
     */
    RELATION("RELATION", "关联规则", "参数间关联性检查，如依赖关系、互斥关系等"),
    
    /**
     * 预警规则 - 用于异常情况的预警
     */
    ALERT("ALERT", "预警规则", "异常情况预警，如阈值监控、趋势预警等");
    
    private final String code;
    private final String name;
    private final String description;
    
    /**
     * 根据代码获取枚举
     */
    public static RuleTypeEnum getByCode(String code) {
        for (RuleTypeEnum ruleType : values()) {
            if (ruleType.getCode().equals(code)) {
                return ruleType;
            }
        }
        return null;
    }
    
    /**
     * 是否为有效的规则类型代码
     */
    public static boolean isValidCode(String code) {
        return getByCode(code) != null;
    }
}

